﻿#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include "CustomHorizontalHeader.h"
#include "CustomVerticalHeader.h"


#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 创建模型
    QStandardItemModel *model = new QStandardItemModel(3, 3, ui->tableView);
    model->setHorizontalHeaderLabels({ "列1", "列2", "列3" });

    ui->tableView->horizontalHeader()->setVisible(false);

    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);

    ui->tableView->setItemDelegate(new CustomDelegate());

    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems); // 整行选中

    // 或者设置为根据内容自动调整，但允许用户手动调整  ,不能设置内部拖拽功能
    // ui->tableView->setDragEnabled(true);
    CustomHorizontalHeader *headerView = new CustomHorizontalHeader(Qt::Horizontal, ui->tableView);

    verticalHeader = new CustomVerticalHeader(Qt::Vertical, ui->tableView);

    ui->tableView->setHorizontalHeader(headerView);
    ui->tableView->setVerticalHeader(verticalHeader);


    // 垂直表头同理
    ui->tableView->verticalHeader()->viewport()->setAutoFillBackground(true);
    ui->tableView->verticalHeader()->viewport()->setBackgroundRole(QPalette::Background);
    ui->tableView->verticalHeader()->viewport()->setPalette(QPalette(Qt::red));

   


    ui->tableView->verticalHeader()->setFixedWidth(200);
    ui->tableView->setBackgroundColor("#00FF00"); // 设置空白区域背景颜色为浅灰色
//    // 添加数据
//    for (int i = 0; i < 15; ++i) {
//        model->setItem(i, 0, new QStandardItem("aaaaa"));
//        model->setItem(i, 0, new QStandardItem("bbbbbbb"));
//    }

    ui->tableView->setModel(model);

    // 连接选中状态变化信号
    connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
        this, &MainWindow::onSelectionChanged);

}

void MainWindow::onSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected) {
    Q_UNUSED(deselected);

    // 获取当前选中的单元格
    QModelIndexList selectedIndexes = ui->tableView->selectionModel()->selectedIndexes();
    if (!selectedIndexes.isEmpty()) {
        int row = selectedIndexes.first().row(); // 获取第一个选中单元格的行号
        verticalHeader->setEditRow(row); // 更新表头的高亮行
    } else {
        verticalHeader->setEditRow(-1); // 清除高亮
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

